package logica;

import exceptions.PlayerWonException;
import mapa.Coordenada;

/**
 * Interfaz que debe implementar el modelo de ejecución abstracto
 * para poder ejecutar acciones sobre la partida
 *
 * @author Hasier Rodriguez
 */
public interface Ejecutable {

    /**
     * Método que realiza sobre la lógica la acción que se determine
     * en una determinada coordenada
     *
     * @param c Coordenada sobre la que realizar la acción
     * @param a Acción a realizar
     * @return Lo que determine el modelo que herede
     * @throws NullPointerException Si la coordenada o la acción son null
     */
    public Object accionEnCasilla(Coordenada c, Accion a) throws PlayerWonException;

    /**
     * Finaliza el turno actual, cambia de jugador y realiza las acciones
     * que determine el modelo que herede
     */
    public void finTurno();

    /**
     * Guarda la partida actual
     */
    public void guardarPartida() throws Exception;
}
